import fs from "fs";
import crypto from "crypto";

/** 通用工具类 */
export class Utils {
   /** 扁平结构转化为树状结构 */
   static ListToTree(list: any[]) {
      const data = new Map();

      list.forEach(item => {
         data.set(item.id, item);
      });

      list.forEach(item => {
         let parent = data.get(item.parent_id);

         if (parent) {
            (parent.children || (parent.children = [])).push(item);
            data.set(parent.id, parent);
         }
      });
      let tree: any[] = [];
      data.forEach(item => {
         if (item.level == 1) tree.push(item);
      });

      data.clear();

      return tree;
   }

   /** 获取文件哈希值(MD5) */
   static GetFileHash(file: Express.Multer.File) {
      const buffer = fs.readFileSync(file.path);
      const hash = crypto.createHash("md5");
      hash.update(buffer.toString(), "utf-8");
      return hash.digest("hex");
   }

   /** 生成加密盐 */
   static GenerateSalt() {
      return Math.random().toString(36).slice(-8);
   }

   /** 生成密码
    * @param pwd 用户明文密码
    * @param salt 加密盐
    */
   static GeneratePWD(pwd: string, salt: string) {
      return crypto
         .createHash("md5")
         .update(pwd + salt)
         .digest("hex");
   }
}
